package com.itheima.wisdomnext.controller;

import com.itheima.wisdomnext.entity.Follow;
import com.itheima.wisdomnext.entity.Post;
import com.itheima.wisdomnext.entity.Result.ResponseResult;
import com.itheima.wisdomnext.entity.Users;
import com.itheima.wisdomnext.service.FollowService;
import com.itheima.wisdomnext.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@CrossOrigin // 允许跨域请求
@RestController // 声明这是一个 REST 控制器，返回 JSON 数据
@RequestMapping("/api/follows") // 所有接口路径以 /api/follows 开头
public class FollowController {

    @Autowired
    private FollowService followService; // 注入关注服务

    @Autowired
    private UserService userService; // 注入用户服务（用于查用户信息）

    /**
     * 获取某用户关注的所有用户记录
     * 请求方式：GET
     * 请求路径：/api/follows/followers/{userId}
     * 路径参数：userId 表示当前用户 ID
     */
    @GetMapping("/followers/{userId}")
    public ResponseResult<List<Follow>> getAllFollowers(@PathVariable Integer userId) {
        List<Follow> followers = followService.getAllFollowers(userId); // 获取关注记录
        for (Follow follower : followers) {
            // 根据被关注者 ID 获取用户信息
            List<Users> usertest = userService.getUserByIdPost(follower.getFollowedId());
            follower.setFollowerId(null); // 可选：隐藏 followerId（出于安全或简化目的）
            follower.setUsers(usertest);  // 将用户信息塞进 follow 对象
        }
        return ResponseResult.success("获取关注者成功！", followers);
    }

    /**
     * 获取所有关注当前用户的用户（即“粉丝”列表）
     * 请求方式：GET
     * 请求路径：/api/follows/followed/{userId}
     */
    @GetMapping("/followed/{userId}")
    public ResponseResult<List<Follow>> getAllFollowed(@PathVariable Integer userId) {
        List<Follow> followed = followService.getAllFollowed(userId); // 获取粉丝记录
        for (Follow follower : followed) {
            // 根据关注者 ID 获取用户信息
            List<Users> usertest = userService.getUserByIdPost(follower.getFollowerId());
            follower.setFollowerId(null); // 隐藏 followerId
            follower.setUsers(usertest);  // 设置用户信息
        }
        return ResponseResult.success("获取被关注者成功！", followed);
    }

    /**
     * 用户关注另一个用户
     * 请求方式：POST
     * 请求路径：/api/follows/follow
     * 请求体：Follow 对象，包含 followerId 和 followedId
     */
    @PostMapping("/follow")
    public ResponseResult<Object> followUser(@RequestBody Follow follow) {
        followService.followUser(follow.getFollowerId(), follow.getFollowedId());
        return ResponseResult.success("关注成功！", null);

    }

    /**
     * 用户取消关注另一个用户
     * 请求方式：POST
     * 请求路径：/api/follows/unfollow
     * 请求体：Follow 对象，包含 followerId 和 followedId
     */
    @PostMapping("/unfollow")
    public ResponseResult<Object> unfollowUser(@RequestBody Follow follow) {
        followService.unfollowUser(follow.getFollowerId(), follow.getFollowedId());
        return ResponseResult.success("取消关注成功！", null);
    }

    /**
     * 判断用户是否关注了某人
     * 请求方式：GET
     * 请求路径：/api/follows/isFollowing
     * 请求参数：followerId 和 followedId
     */
    @GetMapping("/isFollowing")
    public ResponseResult<Boolean> isUserFollowing(@RequestParam int followerId, @RequestParam int followedId) {
        boolean isFollowing = followService.isUserFollowing(followerId, followedId);
        return ResponseResult.success(isFollowing ? "用户已关注" : "用户未关注", isFollowing);
    }
}
